package com.jdk.study.d2jvm.chapter05;

/**
 * @description: 面试题：方法中定义的局部变量是否线程安全？ 答：具体情况具体分析
 * @author: JackLi
 * @date: 2020/4/13 19:43
 */
public class Stack14_StringBuilderTest {

    // s1 的声明方式：是线程安全的 [在内部产生，在内部消亡]
    public static void method1() {
        // StringBuilder：线程不安全
        StringBuilder s1 = new StringBuilder();
        s1.append("a");
        s1.append("b");
        // ...
    }

    // sb 的操作过程：是线程不安全的 [不是在内部产生，但是在内部消亡]
    public static void method2(StringBuilder sb) {
        sb.append("a");
        sb.append("b");
        // ...
    }

    // s1的操作：是线程不安全的    [不是在内部产生，但是在内部消亡]
    public static StringBuilder method3() {
        StringBuilder s1 = new StringBuilder();
        s1.append("a");
        s1.append("b");
        return s1;
    }

    // s1的操作：是线程安全的     [在内部产生，在内部消亡]
    public static String method4() {
        StringBuilder s1 = new StringBuilder();
        s1.append("a");
        s1.append("b");
        return s1.toString();
    }

    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        new Thread(() -> {
            sb.append("a");
            sb.append("b");
        }).start();

        method2(sb);

        System.out.println(sb);
    }

}
